﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 物理层过滤器 - 根据Unity物理层过滤邻居对象
/// 只保留指定物理层上的对象，忽略其他层的对象
/// 可在编辑器中创建：Create > Flock > Filter > Physics Layer
/// </summary>
[CreateAssetMenu(menuName = "Flock/Filter/Physics Layer")]
public class PhysicsLayerFilter : ContextFilter
{
    [Header("过滤设置")]
    [Tooltip("要保留的物理层掩码")]
    public LayerMask mask;

    /// <summary>
    /// 根据物理层过滤邻居对象列表
    /// 只保留在指定物理层上的对象
    /// </summary>
    /// <param name="agent">当前个体（未使用）</param>
    /// <param name="original">原始的邻居对象列表</param>
    /// <returns>过滤后的邻居对象列表</returns>
    public override List<Transform> Filter(FlockAgent agent, List<Transform> original)
    {
        List<Transform> filtered = new List<Transform>();
        
        // 遍历所有邻居对象
        foreach (Transform item in original)
        {
            // 检查对象是否在指定的物理层上
            if (mask == (mask | (1 << item.gameObject.layer)))
            {
                filtered.Add(item);
            }
        }
        
        return filtered;
    }
}
